import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class selectMysql {
    public static void main(String[] args) throws SQLException {
        //查询数据库
        //1创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test_?characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("");
        //2建立连接
        Connection connection = dataSource.getConnection();
        //3构造sql
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);
        //4执行sql
        ResultSet resultSet = statement.executeQuery();//结果集(把它看作一个表格结构的数据) 得到的是一个临时表
        //5遍历结果集
        while(resultSet.next()){
            /*用next()来取出下一行的数据,如果能够取出返回true,如果取不出来到达末尾了则返回false,循环结束
            有一个光标指向结果集的某一行,next()就是在处理移动光标.
            初始情况下,光标指向的是在第一行数据的前一个位置
            进入while循环,首先调用next,光标往后移动一行.看这一行的数据能不能够取出来,能够取出来next返回true,循环继续执行,在循环体里头就可以针对这一行进行操作了.再next...直到next返回false循环结束
            这个循环就是在控制光标往后移动的过程-------->取出每一行*/

            //针对这里的光标指向的行进行处理
            //这里的get也有很多方法,具体情况具体调用~
            //------->取出每一列
            int id = resultSet.getInt("id");//id为列的名字 返回一个int类型的值
            String name = resultSet.getString("name");//name也为列的名字 返回一个String类型的值
            System.out.println("id= "+id+" name= "+name);//取出这一行记录 取出来之后,我们就可以随便对他进行操作了.这里我们进行打印
        }
        //6释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}
